home *** CD-ROM | disk | FTP | other *** search
/ SGI MineSet 2.5 / SGI MineSet 2.5.iso / dist / imgtools.idb / usr / share / src / imgtcl / imgblend.z / imgblend
Text File  |  1998-05-12  |  4KB  |  121 lines

  1. #!/usr/sbin/imgtcl
  2.  
  3. if { $argc != 1 } {
  4.     echo "Usage: $argv0 filename"
  5.     exit
  6. }
  7.  
  8. # procedure to create the sliders that adjust the rotate/zoom/blend values
  9. # it takes the name of its parent widget and returns the name of the toolbar
  10. proc initToolBar { parent } {
  11.     global viewWid
  12.     set bar $parent.Bar
  13.  
  14.     # create a vertical rowColumn and put it on the right side of the form 
  15.     xmRowColumn $bar managed -orientation VERTICAL \
  16.     -bottomAttachment ATTACH_FORM \
  17.     -rightAttachment ATTACH_FORM \
  18.     -topAttachment ATTACH_FORM
  19.  
  20.     # create a slider for the zoom value
  21.     xmLabel $bar.zoomLab managed -labelString "Zoom"
  22.     xmLabel $bar.zoomVal managed -labelString "1.0"
  23.     xmScale $bar.zoom managed -orientation VERTICAL \
  24.     -minimum -100 -maximum 100 -value 0
  25.     $bar.zoom dragCallback { Update DoZoom %value }
  26.     $bar.zoom valueChangedCallback { Update DoZoom %value }
  27.     DoZoom 0
  28.     
  29.     # create slider for the rotation angle
  30.     xmLabel $bar.rotateLab managed -labelString "Rotate"
  31.     xmLabel $bar.rotateVal managed -labelString "0"
  32.     xmScale $bar.rotate managed -orientation VERTICAL \
  33.         -minimum 0 -maximum 360 -value 0
  34.     $bar.rotate dragCallback { Update DoRotate %value }
  35.     $bar.rotate valueChangedCallback { Update DoRotate %value }
  36.     DoRotate 0
  37.  
  38.     # create a slider for the blend value
  39.     xmLabel $bar.blendLab managed -labelString "Blend"
  40.     xmLabel $bar.blendVal managed -labelString "0.3"
  41.     xmScale $bar.blend managed -orientation VERTICAL \
  42.         -minimum 0 -maximum 100 -value 30
  43.     $bar.blend dragCallback { Update DoBlend %value }
  44.     $bar.blend valueChangedCallback { Update DoBlend %value }
  45.     DoBlend 30
  46.  
  47.     return $bar
  48. }
  49.  
  50. # set the zoom factor on the rotZoomImg and update the label
  51. proc DoZoom { factor } {
  52.     set factor [expr pow(2, $factor/100.)]
  53.     rzimg setZoom $factor $factor
  54.     set factor [string range $factor 0 3]
  55.     .main.work.Bar.zoomVal setValues -labelString $factor
  56. }
  57.  
  58. # set the rotate angle on the rotZoomImg and update the label
  59. proc DoRotate { angle } {
  60.     rzimg setAngle $angle
  61.     set angle [string range $angle 0 3]
  62.     .main.work.Bar.rotateVal setValues -labelString $angle
  63. }
  64.  
  65. # set the blend value on the blendImg and update the label
  66. proc DoBlend { alpha } {
  67.     set alpha [expr $alpha / 100.]
  68.     blendimg setConstAlpha $alpha
  69.     set alpha [string range $alpha 0 3]
  70.     .main.work.Bar.blendVal setValues -labelString $alpha
  71. }
  72.  
  73. # Update performs one of the above operations and forces the viewer to paint
  74. proc Update { op value } {
  75.     global viewWid
  76.     $op $value
  77.     [$viewWid getViewer] paint
  78. }
  79.  
  80. # AddFile opens the image file and creates a chain:
  81. #   file -> rotzoom -> blend
  82. # then blend is then added to the viewer
  83. proc AddFile { filename } {
  84.     global viewWid
  85.     ilFileImgOpen fileimg $filename
  86.     ilRotZoomImg rzimg fileimg 0 1 1 ilBiLinear
  87.     rzimg setSize [fileimg getSizePtr]
  88.     ilBlendImgConst blendimg [ilInvertImg invimg rzimg] fileimg 0.5
  89.     set view [$viewWid addImage blendimg]
  90.     $viewWid setSelected 1 $view
  91. }
  92.  
  93. # this call must precede any widget creation
  94. xtAppInitialize
  95.  
  96. # create the main window and an xmForm as the work area
  97. xmMainWindow .main managed
  98. set work .main.work
  99. xmForm $work managed
  100.  
  101. # make a viewer
  102. set viewWid [vkviewer $work.viewer managed]
  103.  
  104. # Create an image processing chain and put the result into the viewer
  105. AddFile $argv
  106.  
  107. # create the toolbar and attach it to the viewer's right side
  108. set bar [initToolBar .main.work]
  109. $work.viewer setValues \
  110.     -topAttachment ATTACH_FORM \
  111.     -leftAttachment ATTACH_FORM \
  112.     -bottomAttachment ATTACH_FORM \
  113.     -rightAttachment ATTACH_WIDGET -rightWidget $bar
  114.  
  115. # make the form the work area of the main window
  116. .main setValues -workWindow $work
  117.  
  118. # realize everything and enter the X event loop
  119. . realizeWidget
  120. . mainLoop
  121.